#include "util.h"
#include <cctype>

int numA[4] = {-127,-95,-124,-92};
int numE[4] = {-119,-87,-117,-85};
int numI[4] = {-115,-83,-113,-81};
int numO[4] = {-109,-77,-106,-74};
int numU[4] = {-102,-70,-100,-68};
int numN[2] = {-111,-79};

// Elimina los simbolitos raros "ÁáÄä ÉéËë ÍíÏï ÓóÖö ÚúÜü Ññ"
// y pasa toda la frase a minusculas
void normalizar(string &str)
{
	if(str.length() > 0){
		for (size_t i = 0 ; i < (str.length()-1) ; i++)
		{
			removerSimbolitos(str,&i);
			minusculizar(str,i);
		}
		minusculizar(str,str.length()-1);
	}
}

// pasa la i esima letra a minusculas (si es una letra y esta en mayusculas)
void minusculizar(string &str,size_t i){

	//lowercase
	if(str[i] <= 'Z' && str[i] >='A')
		str[i] = str[i] - ('Z'-'z');

}

// remueve si en la i esima posicion hay un simbolito raro, lo cambia por su letra normalizada
void removerSimbolitos(string &str,size_t* i){

	     if( puedoReemplazar( -61,numA,str,*i) ) reemplazar(str,'a',i);
	else if( puedoReemplazar( -61,numE,str,*i) ) reemplazar(str,'e',i);
	else if( puedoReemplazar( -61,numI,str,*i) ) reemplazar(str,'i',i);
	else if( puedoReemplazar( -61,numO,str,*i) ) reemplazar(str,'o',i);
	else if( puedoReemplazar( -61,numU,str,*i) ) reemplazar(str,'u',i);
	else if( puedoReemplazarN(-61,numN,str,*i) ) reemplazar(str,'n',i);
}

// retorna true si en la i esima posicion hay un simbolito raro del tipo indicado
// se guardan 2 char para cada simbolito raro : -61 y alguna de las que puse en arreglos
// simplemente me fijo si alguna de esas concuerda y retorno true
bool puedoReemplazar(char primera,int segunda[4],string &str,size_t pos){

	if(str[pos] != primera)
		return false;	

	for (size_t i=0 ; i<4 ; i++){
		if (str[pos+1] == segunda[i])
			return true;
	}
	return false;
}

// lo mismo que el de arriba, pero el arreglo es mas chico...
bool puedoReemplazarN(char primera,int segunda[2],string &str,size_t pos){

	if(str[pos] != primera)
		return false;	

	for (size_t i=0 ; i<2 ; i++){
		if (str[pos+1] == segunda[i])
			return true;
	}
	return false;
}

// reemplazo la letra, borro el espacio extra (se guardan 2 char para los simbolitos) y achico el contador
void reemplazar(string &str,char letra,size_t *pos){

 	str[*pos] = letra;
	str.erase((*pos)+1,1);
	(*pos)--;
}

void limpiarSymb(string &str)
{
   for (unsigned int i = 0; i < str.length(); ++i)
   {
	   if (!isalnum(str[i]) && str[i]!= ' ' && str[i]!= '\n')
	   {
		   str.erase(i,1);
		   --i;
	   }
   }
}

void normalizarYlimpiar(string &str)
{
	normalizar(str);
	limpiarSymb(str);
}
